//
//  HMStatusListViewModel.swift
//  Weibo
//
//  Created by 黄亦寒 on 2016/9/24.
//  Copyright © 2016年 HM. All rights reserved.
//

import UIKit
import SDWebImage
//专门为首页控制器服务
class HMStatusListViewModel: NSObject {

    //数据源数组
    lazy var statusList:[HMStatusViewModel] = [HMStatusViewModel]()

    //加载首页数据的方法
    func loadHomeData(isPullUp:Bool, callBack:@escaping (Bool,String)->()) {
        //获取令牌
        let accessToken = HMUserAccountViewModel.sharedHMUserAccountViewModel.accessToken!
        //获取上拉加载需要的id
        var maxId:Int64 = 0
        //获取下拉刷新需要的id
        var sinceId:Int64 = 0
        //判断是否是上拉加载
        if isPullUp {
            
            //如果是上拉加载，获取最后一条微博的id
            maxId = statusList.last?.status.id ?? 0
            //解决数据重用问题
            if maxId > 0 {
                maxId -= 1
            }
        }else{
            //下拉刷新
            
            sinceId = statusList.first?.status.id ?? 0
            
        }
        
        //检查本地是否有缓存数据
//        let localArray = HMStatusDAL.checkCacheData(maxId: maxId, sinceId: sinceId)
//        print(localArray)
        
        
        
        
        var message:String = "没有加载到最新微博数据"
        
//        NetworkTools.sharedTools.requestStatuses(accessToken: accessToken ,maxId:maxId,sinceId:sinceId) { (response, error) in
//            if error != nil{
//                print("网络请求异常:\(error)")
//                callBack(false,message)
//                return
//            }
//            
//            //执行到此说明请求成功,返回的数据是字典
//            //print("---\(response)")
//            
//            guard let dic = response as?[String:Any] else {
//                print("字典格式不正确")
//                callBack(false,message)
//                return
//            }
//            
//            //执行到此，说明格式正确，取出字典中的status数组，数组里面是字典
//            guard let statusArray = dic["statuses"] as?[[String:Any]] else {
//                print("字典格式不正确")
//                callBack(false,message)
//                return
//            }
            
            //缓存新浪微博数据
            //HMStatusDAL.cacheData(statusDicArray: statusArray)
            HMStatusDAL.loadData(accessToken: accessToken, maxId: maxId, sinceId: sinceId) { (statusArray) in
        
            //执行到此说明格式正确,进行字典转模型
            let statusArr = NSArray.yy_modelArray(with: HMStatus.self, json: statusArray) as! [HMStatus]
            
            //创建调度组
            let group = DispatchGroup()
            
            var tempArray = [HMStatusViewModel]()
            
            //遍历模型数组
            for status in statusArr {
                //把模型转成viewModel供cell使用
                let viewModel = HMStatusViewModel(status:status)
                tempArray.append(viewModel)
                
                //判断是否有单张图片
                if status.pic_urls?.count == 1 {
                    //代表原创微博配图等于一张
                    if let url = status.pic_urls?.first?.thumbnail_pic {
                        
                        //调度组下载
                        group.enter()
                        SDWebImageManager.shared().downloadImage(with: URL(string:url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                            print("原创微博单张图片下载完成")
                            //离开调度组
                            group.leave()
                        })
                        
                    }
                }
                if status.retweeted_status?.pic_urls?.count == 1 {
                    //代表转发微博图片等于一张
                    if let url = status.retweeted_status?.pic_urls?.first?.thumbnail_pic {
                        group.enter()
                        SDWebImageManager.shared().downloadImage(with: URL(string:url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                            print("转发微博单张图片下载完成")
                            group.leave()
                        })
                    }
                }
            }
            //给数据源数组赋值
            //self.statusList = statusArr!
            //self.statusList = tempArray
            //如果是上拉加载就把数据拼接到数组最后面
            if isPullUp {
                self.statusList.append(contentsOf: tempArray)
            }else{
                //如果是下拉刷新就把数据插入到数组最前面
                self.statusList.insert(contentsOf: tempArray, at: 0)
                
            }
            
            //判断服务器返回的数据个数是否大于0
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }
            
            //等待调度组通知任务下载完成
            group.notify(queue: DispatchQueue.main, execute: {
                print("任务全部下载完成")
                callBack(true,message)
                //延时操作
//                DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 2, execute: {
//                    //回调到首页控制器
//                    callBack(true,message)
//                })
            })
            
            
            
        }
        
    }

}
